package design.singleDesign;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Constructor;

public class EnumSingletest {
    public static void main(String[] args) {
//s首先获取两个对象，一个是从单利取得实例化，一个通过序列化获取
        EnumSingleDesign s1= null;
        EnumSingleDesign s2= EnumSingleDesign.getInstance();

        FileOutputStream fos = null;
        try{
            //先写出来
            fos = new FileOutputStream("EnumSingleDesign.obj");
            ObjectOutputStream oos=new ObjectOutputStream(fos);
            oos.writeObject(s2);
            oos.flush();
            oos.close();

            //然后再去读
            FileInputStream fis =  new FileInputStream("EnumSingleDesign.obj");
            ObjectInputStream ois = new ObjectInputStream(fis);
            //内部原理，查看这个类是不是有构造方法，有的话创建新的实例对象。
            s1=(EnumSingleDesign) ois.readObject();
            ois.close();

            System.out.println(s1==s2);

        }catch(Exception e){
            e.printStackTrace();
        }


    }
}

class InvokeDesignTest{
    public static void main(String[] args) {
        try{
            Class<?> clazz=EnumSingleDesign.class;
            Constructor con=clazz.getDeclaredConstructor();
            con.newInstance();
        }catch(Exception e){
            e.printStackTrace();
        }

    }
}
